/*
	Pila.java
	Autor: Jennifer Pamela Valdez Cabrera
	Carne: 10189
	Fecha de entrega: 21 de Julio de 2011
	Descripcion: Es la clase que implementa la interfaz de Stack y le da cuerpo a los metodos
*/

import java.util.ArrayList;
import java.util.List;

public class Pila<E> implements Stack<E>{
	
	//atributos
	private int cont;
	private List<E> vector;
	
	/*
		Pila: es el constructor donde crea una nueva ArrayList y se inicializa el contador con cero
			no recibe parametros
	*/
	public Pila(){
		cont = 0;
		vector = new ArrayList<E>();
	}

    /*
		push: agrega un elemento al stack, el cual es recibido como
			parametro y no devuelve ningun valor.
	*/
	public void push(E item){
		vector.add(item);
		cont++;
	}
	
	
	/*
		pop: obtiene el elemento al cual le toca salir y lo remueve del
			stack si no esta vacio; dicho elemento es devuelto
			no recibe parametros
	*/
	public E pop(){
		E temp = null;
		if (!empty()){
			cont--;
			temp = vector.get(cont);
			vector.remove(cont);
		}
		else
			System.out.println("--> El Stack esta vacio <--");
		return temp;
	}
	
	
	
	/*
		peek: devuelve el elemento proximo a ser removido
		no recibe parametros
	*/
	public E peek(){
		E temp = null;
		if (!empty())
			temp = vector.get(cont-1);
		else
			System.out.println("--> El Stack esta vacio <--");
		return temp;
	}
	
	
	
	/*
		empty: indica si el stack esta vacio. True si esta vacio y viceversa
		no recibe parametros
	*/
	public boolean empty(){
		return (cont == 0);
	}
	
	
	/*
		size: indica el cuantos elementos posee el stack, el cual lo devuelve como un int 
		no recibe parametros
	*/
	public int size(){
		return cont;
	}
	
}